<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:o="http://www.kadm-Software.ua/OOPLang"
    xmlns:op="http://www.kadm-Software.ua/OperationsLang"
    xmlns:l="http://www.kadm-Software.ua/LiteralsLang"
    xmlns:f="http://www.kadm-Software.ua/FunctionsLang"
    xmlns:a="http://www.kadm-Software.ua/AlgorytmicLang"
    xmlns:c="http://www.kadm-Software.ua/Code">

    <xsl:output method="xml" version="1.0" encoding="Windows-1251"/>

    <xsl:template match="op:assign">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> = </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:group">
        <xsl:text disable-output-escaping="yes">(</xsl:text>
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes">)</xsl:text>
    </xsl:template>

    <xsl:template match="op:lt">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> &lt; </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:le">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> &lt;= </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:gt">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> &gt; </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:ge">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> &gt;= </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:eq">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> == </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:ne">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> != </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:or">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> || </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:and">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> &amp;&amp; </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:not">
        <xsl:text disable-output-escaping="yes">! </xsl:text>
        <xsl:apply-templates select="*[1]" />
    </xsl:template>

    <xsl:template match="op:xor">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes"> xor </xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="op:pref-inc">
        <xsl:text disable-output-escaping="yes">++</xsl:text>
        <xsl:apply-templates select="*[1]" />
    </xsl:template>

    <xsl:template match="op:suf-inc">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes">++</xsl:text>
    </xsl:template>

    <xsl:template match="op:pref-dec">
        <xsl:text disable-output-escaping="yes">--</xsl:text>
        <xsl:apply-templates select="*[1]" />
    </xsl:template>

    <xsl:template match="op:pref-dec">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes">--</xsl:text>
    </xsl:template>

    <xsl:template match="o:property">
        <xsl:apply-templates select="*[1]" />
        <xsl:text disable-output-escaping="yes">-></xsl:text>
        <xsl:apply-templates select="*[2]" />
    </xsl:template>

    <xsl:template match="o:this">
        <xsl:text disable-output-escaping="yes">this</xsl:text>
    </xsl:template>

    <xsl:template match="l:function/l:args">
        <xsl:text disable-output-escaping="yes">(</xsl:text>
        <xsl:apply-templates select="*[1]" />
        <xsl:for-each select="*[position() > 1]">
            <xsl:text disable-output-escaping="yes">, </xsl:text>
            <xsl:apply-templates select="." />
        </xsl:for-each>
        <xsl:text disable-output-escaping="yes">)</xsl:text>
    </xsl:template>

    <xsl:template match="l:function/l:code">
        <c:l>
            <xsl:text disable-output-escaping="yes">{</xsl:text>
        </c:l>
        <c:block>
            <xsl:apply-templates />
        </c:block>
        <c:l>
            <xsl:text disable-output-escaping="yes">}</xsl:text>
        </c:l>
    </xsl:template>

    <xsl:template match="op:assign[local-name(*[2]) = 'function']" priority="2">
        <c:l>
            <xsl:text disable-output-escaping="yes">function </xsl:text>
            <xsl:apply-templates select="*[1]" />
            <xsl:apply-templates select="l:function/l:args" />
        </c:l>
        <xsl:apply-templates select="l:function/l:code" />
    </xsl:template>

    <xsl:template match="ident">
        <xsl:value-of disable-output-escaping="yes" select="." />
    </xsl:template>

    <xsl:template match="f:call/f:args">
        <xsl:text disable-output-escaping="yes">(</xsl:text>
        <xsl:apply-templates select="*[1]" />
        <xsl:for-each select="*[position() > 1]">
            <xsl:text disable-output-escaping="yes">, </xsl:text>
            <xsl:apply-templates select="." />
        </xsl:for-each>
        <xsl:text disable-output-escaping="yes">)</xsl:text>
    </xsl:template>

    <xsl:template match="l:string">
        <xsl:text disable-output-escaping="yes">"</xsl:text>
        <xsl:apply-templates />
        <xsl:text disable-output-escaping="yes">"</xsl:text>
    </xsl:template>

    <xsl:template match="l:int">
        <xsl:value-of disable-output-escaping="yes" select="." />
    </xsl:template>

    <xsl:template match="a:for">
        <c:l>
            <xsl:text disable-output-escaping="yes">for (</xsl:text>
            <xsl:apply-templates select="a:init" />
            <xsl:text disable-output-escaping="yes">; </xsl:text>
            <xsl:apply-templates select="a:cond" />
            <xsl:text disable-output-escaping="yes">; </xsl:text>
            <xsl:apply-templates select="a:after-iter" />
            <xsl:text disable-output-escaping="yes">)</xsl:text>
        </c:l>
        <xsl:apply-templates select="a:cmd" />
    </xsl:template>

    <xsl:template match="a:block">
        <c:l>
            <xsl:text disable-output-escaping="yes">{</xsl:text>
        </c:l>
        <c:block>
            <xsl:apply-templates />
        </c:block>
        <c:l>
            <xsl:text disable-output-escaping="yes">}</xsl:text>
        </c:l>
    </xsl:template>

</xsl:stylesheet>